package com.neuedu.javase.abstarcts;

/**
 * @auth 金山老师
 * title:   书籍代码
 * creatime: 2022-09-27 9:36
 * 描述 : 接口   老板提出来的需求
 */

/**
 * interface 完全抽象  ,
 */
public abstract class Animal {


    /**
     *  final 声明的属性 不可以修改，需要在声明全局属性或者在构造器中初始化
     */
//    public final double pi = 3.14;
    public final double pi ;


    public Animal(){
        pi = 3.14;
    }

    /**
     * final 声明的方法 不能被子类 覆盖
     */
    public final void eat(){
        System.out.println("吃的标准是每顿 50元");
    }


    /**
     * abstract : 类不能被new，只能派生子类（通过继承使用里面的功能）
     * abstract : 声明在方法中，子类必须实现这个方法
     */
    public abstract void play();


    public static void main(String[] args) {
        Animal ani = new Tiger();


        ani = new Panda();

        ani.play();
        ani.play();
        ani.play();
        ani.play();
        ani.play();
        ani.play();
        ani.play();


        // ani 是否是Tiger ？？？
        boolean isInstatnce = ani instanceof Tiger;
        System.out.println("isInstatnce = " + isInstatnce);

        if(isInstatnce){
            //类型转换 强制转换  Animal  ---> Tiger (向下塑形)
            ((Tiger)ani).bulie();
        }

        Tiger tt = new Tiger();
        Animal aaa = tt; // Tiger --->  Animal  (向上塑形)


    }


}
